package com.xx.xunyou.serviceImpl;

import com.xx.springBootUtil.excption.BaseException;
import com.xx.springBootUtil.util.ObjectHelper;
import com.xx.xunyou.dao.item.good.XunyouGoodDAO;
import com.xx.xunyou.entity.item.good.XunyouGood;
import com.xx.xunyou.entity.item.good.XunyouGoodExample;
import com.xx.xunyou.service.XunyouGoodService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * @program: xunyou-parent
 * @author: zhl
 * @create: 2019-05-20
 **/
@Service
public class XunyouGoodServiceImpl implements XunyouGoodService {

    @Autowired
    private XunyouGoodDAO xunyouGoodDAO;

    @Autowired
    private XunyouGoodService xunyouGoodService;

    @Override
    public long queryCount(Integer objectId, Integer typeId) {
        XunyouGoodExample xunyouGoodExample = new XunyouGoodExample();
        XunyouGoodExample.Criteria criteria = xunyouGoodExample.createCriteria();
        criteria.andObjectIdEqualTo(objectId);
        criteria.andTypeIdEqualTo(typeId);
        return xunyouGoodDAO.countByExample(xunyouGoodExample);
    }

    @Override
    public XunyouGood queryByUserIdAndObjectIdAndTypeId(Integer userId, Integer objectId, Integer typeId) {
        XunyouGoodExample xunyouGoodExample = new XunyouGoodExample();
        XunyouGoodExample.Criteria criteria = xunyouGoodExample.createCriteria();
        criteria.andObjectIdEqualTo(objectId);
        criteria.andTypeIdEqualTo(typeId);
        criteria.andUserIdEqualTo(userId);
        List<XunyouGood> xunyouGoods = xunyouGoodDAO.selectByExample(xunyouGoodExample);
        if (ObjectHelper.isNotEmpty(xunyouGoods)){
            return xunyouGoods.get(xunyouGoods.size()-1);
        }
        return null;
    }

    @Override
    @Transactional
    public void insert(Integer userId, Integer objectId, Integer typeId) {
        XunyouGood xunyouGood = xunyouGoodService.queryByUserIdAndObjectIdAndTypeId(userId, objectId, typeId);
        if (xunyouGood!=null){
            throw new BaseException("已经赞过了！");
        }
        XunyouGood xunyouGood1 = new XunyouGood();
        xunyouGood1.setCreateTime(new Date());
        xunyouGood1.setObjectId(objectId);
        xunyouGood1.setTypeId(typeId);
        xunyouGood1.setUserId(userId);
        xunyouGoodDAO.insertSelective(xunyouGood1);
    }

    @Override
    @Transactional
    public void delete(Integer userId, Integer objectId, Integer typeId) {
        XunyouGood xunyouGood = xunyouGoodService.queryByUserIdAndObjectIdAndTypeId(userId, objectId, typeId);
        if (xunyouGood!=null){
            XunyouGoodExample xunyouGoodExample = new XunyouGoodExample();
            XunyouGoodExample.Criteria criteria = xunyouGoodExample.createCriteria();
            criteria.andObjectIdEqualTo(objectId);
            criteria.andTypeIdEqualTo(typeId);
            criteria.andUserIdEqualTo(userId);
            xunyouGoodDAO.deleteByExample(xunyouGoodExample);
        }
    }
}
